# cond

Библиотека для создания логических условий

## Основная идея

- все условия заключаются в скобки, даже верхнее
- все условия строятся по правилу: **<команда> <первый элемент> [<второй элемент>]**
- все элементы - строки, хотя для некоторых команд логика состоит в преобразовании в число
- если элемент состоит из нескольких слов, то его надо ограничить кавычками
- если внутри элемента тоже есть кавычки, то их надо экранировать 



## Публичные функции

Библиотека предоставляет одну публичную функцию

>OK - функция проверки логического условия
>    Входящие параметры
>        in -  логическая строка
>        data - словарь переменных
>    Выходные переменные
>        bool - условие выполнено
>        err - ошибка

**ВАЖНО**: переменные в логической строке указываются в виде **$$имя_переменной$$**, а в словаре **имя_переменной**.
                  
Примеры:
```go
    OK("(and (eq $$msisdn$$ 79876543210)  (gt $$age$$ 22))", 
		map[string]string{"msisdn": "79876543210", "age": "22"})
```

В данном случае OK вернет false. Т.к. телефоны совпадают, а вот age равен, а д.б. больше.

## Список команд 

### Строковые команды
- eq - элементы равны
- ne - элементы не равны

### Числовые команды 

Для данных команды мы переводим полученные строки в числа и дальше сравниваем числа

- gt - первый элемент больше второго
- lt - первый элемент меньше второго
- gte - первый элемент больше или равен второму
- lte - первый элемент меньше или равен второму

### Логические команды

- and - Логическое И
- or - логическое ИЛИ
- not - отрицание
  - эта команда принимаем только 1 элемент 
